package cn.tedu.user.management.service;

import cn.tedu.rtms.commons.pojo.vo.PageData;
import cn.tedu.user.management.pojo.dto.UserLoginInfoDTO;
import cn.tedu.user.management.pojo.param.UserAddNewParam;
import cn.tedu.user.management.pojo.param.UserLoginInfoParam;
import cn.tedu.user.management.pojo.param.UserPasswordParam;
import cn.tedu.user.management.pojo.param.UserUpdateInfoParam;
import cn.tedu.user.management.pojo.vo.*;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 处理用户数据的业务接口
 *
 * @author java@tedu.cn
 * @version 0.0.1
 */
@Transactional
public interface IUserService {

    /**
     * 类别“是否启用”的状态文本
     */
    String ENABLE_TEXT[] = {"禁用", "启用"};

    /**
     * 用户登录
     *
     * @param userLoginInfoParam 封装了用户名、密码等相关信息的对象
     * @param remoteAddr          来访IP地址
     * @param userAgent           浏览器信息
     * @return 此用户登录后得到的JWT数据
     */
    UserLoginInfoDTO login(UserLoginInfoParam userLoginInfoParam, String remoteAddr, String userAgent);

    /**
     * 用户退出登录
     *
     * @param jwt 当前已经登录的用户的JWT
     */
    void logout(String jwt);

     /**
     * 添加用户
     *
     * @param userAddNewParam 用户数据
     */
    void addNew(UserAddNewParam userAddNewParam, Integer enable);

    /**
     * 删除用户
     *
     * @param id 用户ID
     */
    void delete(Long id, Long currentId);

    /**
     * 重置密码
     *
     * @param id 用户ID
     */
    void resetPassword(Long id, Long currentId);

     /**
     * 启用用户
     *
     * @param id 用户ID
     */
     void setEnable(Long id);

    /**
     * 启用所有用户
     *
     */
    void setEnableAll();

     /**
     * 禁用用户
     *
     * @param id 用户ID
     */
    void setDisable(Long id, Long currentId);

     /**
     * 查询用户列表，将使用默认的每页记录数
     *
     * @param pageNum 页码
     * @return 用户列表
     */
    PageData<UserListItemVO> list(Integer pageNum);

    /**
     * 查询用户列表
     *
     * @param pageNum  页码
     * @param pageSize 每页记录数
     * @return 用户列表
     */
    PageData<UserListItemVO> list(Integer pageNum, Integer pageSize);

    /**
     * 查询注册列表，将使用默认的每页记录数
     *
     * @param pageNum 页码
     * @return 注册列表
     */
    PageData<UserListItemVO> regList(Integer pageNum);

    /**
     * 查询注册列表
     *
     * @param pageNum  页码
     * @param pageSize 每页记录数
     * @return 注册列表
     */
    PageData<UserListItemVO> regList(Integer pageNum, Integer pageSize);

    /**
     * 根据关键字查找员工信息
     *
     * @return 员工列表
     */
    List<UserListItemVO> selectByKeywords(String Keywords);

    /**
     * 修改员工信息
     *
     * @param id               被修改员工的ID
     * @param userUpdateInfoParam 的员工新数据
     */
    void updateInfoById(Long id, UserUpdateInfoParam userUpdateInfoParam, Long currentId);

    /**
     * 根据ID查询员工信息
     *
     * @param id 员工ID
     * @return 匹配的员工数据，如果没有匹配的数据，则返回null
     */
    UserStandardVO getStandardById(Long id);

    /*
    *修改密码
    */
    void updatePassword(Long id, UserPasswordParam userPasswordParam);

    /*
    * 查看当前账号资料
    */
    UserOwnInfoVO userOwnInfo(Long id);

    /*
    * 根据id查看员工角色信息
    */
    UserRoleStandardVO getUserRoleById(Long id);


    /*
    * 查询员工列表
    */
    List<UserListVO> selectUserList();
}
